package com.itbaizhan.cglib;

import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;

//代理方式类，实现MethodInterceptor接口，重写intercept方法
public class ShoppingProxy implements MethodInterceptor {
    //被代理对象
    private Apple apple;

    public ShoppingProxy(Apple apple) {
        this.apple = apple;
    }

    /*定义原方法的增强方式
    Object o :被代理对象
    * method : 被代理对象调用的方法
       Object[] : 被代理对象用的的方法时，传入的参数
       methodProxy: 底层生成的代理类的引用*/
    @Override
    public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
        String name = method.getName();//获取被代理对象的方法名
        if("sell".equals(name)){
            double price = (double)objects[0]*0.8;//传进来的参数，改变价格
            Object result = method.invoke(apple, price);//重新执行方法
            return result+"充电线";
        }else if("repair".equals(name)){
            System.out.println("个人专属为你服务");
            return method.invoke(apple,objects);
        }else {
            return method.invoke(apple,objects);
        }

    }
}
